package TPVTarryDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import TPVTarryDTOS.CatalogoProductosDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CatalogoProductosDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public CatalogoProductosDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ ESTE METODO CREA UNA NUEVA FAMILIA
     *
     * @param catalogo
     */
    public void nuevaFamilia(CatalogoProductosDTO catalogo) {
        db.openDatabase();
        String query = "INSERT INTO catalogo_productos SET";
        query += " catalogo_productos.id_tipo = 1,";
        query += " catalogo_productos.id_cb = 0,";
        query += " catalogo_productos.id_pertenece = 0,";
        query += " catalogo_productos.proveedor = 'ND',";
        query += " catalogo_productos.nombre = '" + catalogo.getNombre() + "',";
        query += " catalogo_productos.descripcion = '" + catalogo.getDescripcion() + "',";
        query += " catalogo_productos.observaciones = '" + catalogo.getObservaciones() + "';";
        db.execute(query);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ METODO QUE OBTIENE TODAS LAS FAMILIAS
     */
    public Vector todaFamilia() {
        Vector familias = new Vector();
        db.openDatabase();
        String query = "SELECT * FROM ";
        query += " catalogo_productos ";
        query += " WHERE ";
        query += " catalogo_productos.id_tipo =1 ";
        query += " AND ";
        query += " catalogo_productos.id_cb =0 ";
        query += " AND ";
        query += " catalogo_productos.id_pertenece = 0;";
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                CatalogoProductosDTO catalogo = new CatalogoProductosDTO();
                catalogo = res.catalogoProductosDTO(rst);
                familias.add(catalogo);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return familias;
    }

    /**
     * ALAN GONZALEZ METODO PARA OBTENER UNA FAMILIA POR ID
     *
     * @param id
     * @return
     */
    public CatalogoProductosDTO unaFamiliaPorId(int id) {
        CatalogoProductosDTO catalogoProductosDTO = new CatalogoProductosDTO();
        db.openDatabase();
        String query = "SELECT * FROM catalogo_productos WHERE catalogo_productos.id = " + id + " and catalogo_productos.id_tipo = 1;";
        ResultSet rst = db.executeQuery(query);
        try {
            if (rst.next()) {
                catalogoProductosDTO = res.catalogoProductosDTO(rst);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return catalogoProductosDTO;
    }

    /**
     * ALAN GONZALEZ METODO PARA OBTENER UNA CATEGORIA POR ID
     *
     * @param id
     * @return
     */
    public CatalogoProductosDTO unaCategoriaPorId(int id) {
        CatalogoProductosDTO catalogoProductosDTO = new CatalogoProductosDTO();
        db.openDatabase();
        String query = "SELECT * FROM catalogo_productos WHERE catalogo_productos.id = " + id + " and catalogo_productos.id_tipo = 2;";
        ResultSet rst = db.executeQuery(query);
        try {
            if (rst.next()) {
                catalogoProductosDTO = res.catalogoProductosDTO(rst);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return catalogoProductosDTO;
    }

    /**
     * ALAN GONZALEZ METODO PARA EDITAR UNA FAMILIA
     *
     * @param idFamilia
     * @param catalogo
     */
    public void editaFamilia(int idFamilia, CatalogoProductosDTO catalogo) {
        db.openDatabase();
        String query = " UPDATE catalogo_productos SET";
        query += " catalogo_productos.nombre ='" + catalogo.getNombre() + "',";
        query += " catalogo_productos.descripcion ='" + catalogo.getDescripcion() + "',";
        query += " catalogo_productos.observaciones = '" + catalogo.getObservaciones() + "'";
        query += " WHERE";
        query += " catalogo_productos.id = " + idFamilia;
        query += " AND";
        query += " catalogo_productos.id_tipo = 1;";
        db.execute(query);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ METODO QUE DEVUELVE UN VECTOR CON TODAS LAS CATEGORIAS QUE
     * CONTIENE UNA FAMILIA DETERMINADA
     *
     * @param idFamilia
     * @return
     */
    public Vector todaCategoria(int idFamilia) {
        Vector categorias = new Vector();
        String query = " SELECT * FROM catalogo_productos ";
        query += " WHERE";
        query += " catalogo_productos.id_tipo = 2";
        query += " AND";
        query += " catalogo_productos.id_pertenece = " + idFamilia + ";";
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                CatalogoProductosDTO catalogoProductosDTO = new CatalogoProductosDTO();
                catalogoProductosDTO = res.catalogoProductosDTO(rst);
                categorias.add(catalogoProductosDTO);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return categorias;
    }

//--------------------------------------------------------------------------------------------------------------------------------//
    /**
     * ALAN GONZALEZ METODO QUE ELIMINA A UNA FAMILIA
     *
     * @param idFamilia
     */
    public void eliminaFamilia(int idFamilia) {
        db.openDatabase();
        String qEliminaFamilia = "DELETE FROM catalogo_productos WHERE catalogo_productos.id_pertenece = 0 and catalogo_productos.id =" + idFamilia;
        db.execute(qEliminaFamilia);
        db.closeDatabase();
    }

    /**
     *
     * @param idCategoria
     */
    public void eliminaCategoria(int idCategoria) {
        db.openDatabase();
        String qEliminaCategoria = "DELETE FROM catalogo_productos WHERE catalogo_productos.id=" + idCategoria;
        db.execute(qEliminaCategoria);
        db.closeDatabase();
    }

    /**
     *
     * @param idProducto
     */
    public void eliminaProductos(int idProducto) {
        db.openDatabase();
        String qEliminaProducto = "DELETE FROM catalogo_productos WHERE catalogo_productos.id_pertenece = 0 and catalogo_productos.id=" + idProducto;
        db.execute(qEliminaProducto);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ METODO QUE DEVUELVE TODAS LAS CATEGORIAS QUE PERTENECEN A
     * UNA FAMILIA
     *
     * @param idFamilia
     * @return
     */
    public Vector categoriaDeUnaFamilia(int idFamilia) {
        Vector vCategorias = new Vector();
        String query = " SELECT";
        query += " catalogo_productos.id as categoriasDeFamilia";
        query += " FROM";
        query += " catalogo_productos ";
        query += " WHERE catalogo_productos.id_tipo = 2 ";
        query += " AND";
        query += " catalogo_productos.id_pertenece=" + idFamilia;
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                int idCategoria = rst.getInt("categoriasDeFamilia");
                vCategorias.add(idCategoria);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return vCategorias;
    }

    /**
     * ALAN GONZALEZ METODO PARA PRODUCTOS
     *
     * @param idCategoria
     * @return
     */
    public Vector productosDeUnaCategoria(int idCategoria) {
        Vector vProductos = new Vector();
        String query = " SELECT";
        query += " catalogo_productos.id as productosDeCategoria";
        query += " FROM";
        query += " catalogo_productos ";
        query += " WHERE catalogo_productos.id_tipo = 3 ";
        query += " AND";
        query += " catalogo_productos.id_pertenece=" + idCategoria;
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                int idProducto = rst.getInt("productosDeCategoria");
                vProductos.add(idCategoria);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return vProductos;
    }

    /**
     * ALAN GONZALEZ METODO PARA CRAR UNA NUEVA CATEGORIA
     */
    public void nuevaCategoria(int idFamilia, CatalogoProductosDTO catalogo) {
        db.openDatabase();
        String query = "INSERT INTO catalogo_productos SET";
        query += " catalogo_productos.id_tipo = 2,";
        query += " catalogo_productos.id_cb = 0,";
        query += " catalogo_productos.id_pertenece = " + idFamilia + ",";
        query += " catalogo_productos.proveedor = 'ND',";
        query += " catalogo_productos.nombre = '" + catalogo.getNombre() + "',";
        query += " catalogo_productos.descripcion = '" + catalogo.getDescripcion() + "',";
        query += " catalogo_productos.observaciones = '" + catalogo.getObservaciones() + "';";
        db.execute(query);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ METODO PARA EDITAR UNA CATEGORA
     *
     * @param idcategoria
     */
    public void editaCategoria(int idcategoria, CatalogoProductosDTO catalogo) {
        db.openDatabase();
        String query = " UPDATE catalogo_productos SET";
        query += " catalogo_productos.nombre ='" + catalogo.getNombre() + "',";
        query += " catalogo_productos.descripcion ='" + catalogo.getDescripcion() + "',";
        query += " catalogo_productos.observaciones = '" + catalogo.getObservaciones() + "'";
        query += " WHERE";
        query += " catalogo_productos.id = " + idcategoria;
        query += " AND";
        query += " catalogo_productos.id_tipo = 2;";
        db.execute(query);
        db.closeDatabase();
    }

    
    /**
     * ALAN GONZALEZ 
     * METODO PRODUCTOS DENTRO DE UNA CATEGORIA 
     * @param idCategoria
     * @return 
     */
    public Vector productosCategoria(int idCategoria){
        Vector vProductos = new Vector();
        String query = "SELECT * FROM catalogo_productos WHERE catalogo_productos.id_pertenece =" + idCategoria;
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            while (rst.next()) {
                CatalogoProductosDTO catalogoProductosDTO = new CatalogoProductosDTO();
                catalogoProductosDTO = res.catalogoProductosDTO(rst);
                vProductos.add(catalogoProductosDTO);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return vProductos;
    }

}
